package com.chenjl.api;

import java.util.Properties;

import org.apache.kafka.clients.producer.ProducerConfig;
/**
 * 生产者配置
 * 2016-9-14 11:02:44
 * @author chenjinlong
 */
public class TestOnProducerConfig {
	public static void main(String[] args) {
		Properties props = new Properties();
		
		props.put("client.id","1001");
		props.put("bootstrap.servers","192.168.245.129:9092,192.168.245.130:9092");
		props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
		props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
		
		//NetworkClient需要配置
		//设置连接最大的空闲时间
		props.put("connections.max.idle.ms",9*60*1000);
		//用于设置每个连接最大的请求个数
		props.put("max.in.flight.requests.per.connection",10);
		//用于设置重新尝试连接的等待时间
		props.put("reconnect.backoff.ms",50);
		//用于设置socket的发送缓冲区SO_SNDBUF的大小
		props.put("send.buffer.bytes",128 * 1024);
		//用于设置socket的接收响应的缓冲区SO_RCVBUF的大小
		props.put("receive.buffer.bytes",32 * 1024);
		//配置socket请求的最大超时时间
		props.put("request.timeout.ms",30*1000);
		
		
		//Sender发送线程需要配置
		//0 不等待 ;1 only leader同步 ;all 所有同步
		props.put("acks","all");
		//配置发送失败的重试次
		props.put("retries","3");
		//每次producer请求的最大的字节数
		props.put("max.request.size",1*1024*1024);
		
		
		//执行producer.send()，是把数据存储到发送的缓冲区中，缓冲区的实现是RecordAccumulator实例，需要配置如下
		//批量提交的batch字节大小
		props.put("batch.size",16*1024);
		//配置数据缓存的最大延迟时间
		props.put("linger.ms",0);
		//配置producer端等待向server发送的数据的缓冲区的大小
		props.put("buffer.memory",32 * 1024 * 1024);
		//默认none，配置数据的压缩算法，默认为不压缩，可配置的值为none,gzip,snappy,lz4
		props.put("compression.type","none");
		//在向broker发送数据失败后的重试间隔时间
		props.put("retry.backoff.ms",100L);		
		
		
		//配置每个producer端缓存topic的metadata的过期时间，默认值为5分钟
		props.put("metadata.max.age.ms",5 * 60 * 1000);
		//send数据或partitionFor函数得到对应的leader时，最大的等待时间
		props.put("max.block.ms",60*1000);
		//用于producer写入数据时用于计算这条数据对应的partition的分配算子实例，这个实例必须是的Partitioner实现
		//实例初始化时会调用configure函数把配置文件传入进去，用于实例生成时使用，默认情况下分区算子是DefaultPartitioner
		//props.put("partitioner.class","");
		//props.put("interceptor.classes","");
		//props.put("metrics.sample.window.ms","");
		//props.put("metrics.num.samples","");
		//props.put("metric.reporters","");
		props.put("security.protocol","PLAINTEXT");

		
		ProducerConfig producerConfig = new ProducerConfig(props);
		
		System.out.println(producerConfig.toString());
	}
}